package hero.mps.leet_code_6;

public class ZigZagConversion {
    public static String convert(String s, int numRows){
        // 如果 numRows 为 1 或者字符串 s 的长度小于等于 numRows，则直接返回原字符串
        if (numRows == 1 || s.length() <= numRows)
            return s;

        // 创建一个长度为 numRows 的 StringBuilder 数组，用于存储每一行的字符
        StringBuilder[] rows = new StringBuilder[numRows];
        // 初始化每一行的 StringBuilder
        for (int i = 0; i < numRows; i++) {
            rows[i] = new StringBuilder();
        }

        // 当前行号
        int curRow = 0;
        // 是否向下移动，初始为 false，即先向上移动
        boolean down = false;

        // 遍历字符串 s 的每个字符
        for (int i = 0; i < s.length(); i++) {
            // 将当前字符添加到对应行的 StringBuilder 中
            rows[curRow].append(s.charAt(i));

            // 如果当前行是第一行或最后一行，则改变移动方向
            if (curRow == 0 || curRow == numRows - 1) {
                down = !down;
            }

            // 根据移动方向更新当前行号
            curRow += down ? 1 : -1;
        }

        // 创建一个 StringBuilder 用于存储结果
        StringBuilder res = new StringBuilder();
        // 遍历每一行的 StringBuilder，将其内容添加到结果中
        for (StringBuilder row : rows) {
            res.append(row);
        }

        // 返回结果字符串
        return res.toString();
    }


    public static void main(String[] args) {
        System.out.println(convert("PAYPALISHIRING", 3));
    }
}
